En la sección anterior de este documento, todos los archivos proporcionados por la compañÍa de telecomunicaciones \(ABCD\) fueron sometidos a una limpieza de datos con el fin de estructurarlos de tal manera que su manipulación se pueda ejecutar de forma más sencilla.
Una vez que ya se tienen los datos en un formato homogeneizado se procede a hacer un Análisis Exploratorio de los Datos, análisis que consiste en examinar los datos previamente a la aplicación de cualquier modelo que proporcione una solución a la problemática de la empresa. La finalidad de dicho análisis es extraer información relevante de los datos en crudo que permita adquirir un entendimiento general de estos e indagar en el comportamiento de las variables en cuestión y su relación en conjunto.
A continuación se presenta el Análisis Exploratorio de los Datos de Venta de la compañía \(ABCD\).
La compañía de telecommunicaciones \(ABCD\) posee un registro de sus ventas que se ve de la siguiente manera:
#Lectura de datos de la tabla con variables relacionadas con el nivel socioeconomico por estado
tabla_final_2 <- read_csv("DATOS_LIMPIOS_PARA_EDA.csv")
#head(tabla_final_2)
El registro consta de 932,963 observaciones y 13 variables.
dim(tabla_final_2)
## [1] 932963 13
names(tabla_final_2)
## [1] "punto_de_venta" "fecha" "mes" "anio"
## [5] "sku" "marca" "gamma" "zona"
## [9] "estado" "ciudad" "latitud" "longitud"
## [13] "ventas_diarias"
Con esta visualización general de los datos se pueden estructurar preguntas que permitan entender mejor el contenido dentro de este documento. A continuación se enlistan las preguntas base para comenzar con la comprensión de los datos.
1. ¿Hay campos vacíos?
Tras la limpieza de datos, a estas alturas los registros no contienen campos vacíos en ninguna variable.
p1
2. ¿Cuántos puntos de venta distintos hay?
Hay 1,909 puntos de venta distintos.
nrow(p2)
## [1] 1909
3. ¿Rango de fechas de los datos?
El conjunto de observaciones abarcan 10 meses en total, del primero de junio del 2018 al 31 de marzo del 2019.
p3[c(1,301),]
## # A tibble: 2 x 1
## fecha
## <date>
## 1 2018-06-01
## 2 2019-03-31
4. ¿Cuántos productos distintos hay?
Hay 455 productos distintos, cada uno identificado por un SKU único, que la compañía vende.
p4 <- tabla_final_2%>%select(sku)%>%group_by(sku)%>%unique()
nrow(p4)
## [1] 455
5. ¿Cuántas marcas vende la compañía y cuáles son?
La compañia \(ABCD\) cuenta con productos de 12 marcas distintas.
nrow(p5)
## [1] 12
p5%>%arrange(marca)
## # A tibble: 12 x 1
## # Groups: marca [12]
## marca
## <chr>
## 1 affix
## 2 alcatel
## 3 apple
## 4 hisense
## 5 huawei
## 6 lanix
## 7 lenovo
## 8 lg
## 9 motorola
## 10 samsung
## 11 sony
## 12 zte
6. ¿Cuántas gammas consideran los datos?
Son 4 las gammas en las que se agrupan los productos.
p6
## # A tibble: 4 x 1
## # Groups: gamma [4]
## gamma
## <chr>
## 1 baja
## 2 media
## 3 premium
## 4 alta
8. ¿En cuántas zonas esta dividido el territorio?
Son 8 las zonas en las que esta dividido el territorio.
p8
## # A tibble: 8 x 1
## # Groups: zona [8]
## zona
## <chr>
## 1 centro sur
## 2 centro occidente
## 3 golfo de mexico
## 4 norte
## 5 pacifico sur
## 6 peninsula de yucatan
## 7 noreste
## 8 noroeste
A continuación se presenta la división territorial de la República Mexicana en las 8 zonas delimidas por la Comisión Nacional para el Conocimiento y Uso de la Biodiversidad.
knitr::include_graphics("mapa_nuevo.png")
9. ¿En cuántos estados tiene presencia la compañía?
La compañía tiene presencia en los 32 estados de la república.
nrow(p9)
## [1] 32
10. ¿En cuántas ciudades tiene presencia la compañía?
son 228 las ciudades en las que la compañía tiene presencia.
nrow(p10)
## [1] 228
tabla_final_2
## # A tibble: 932,963 x 13
## punto_de_venta fecha mes anio sku marca gamma zona estado
## <chr> <date> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
## 1 1 poniente 2018-06-01 6 2018 N.HU~ huaw~ baja cent~ puebla
## 2 1 poniente 2018-06-01 6 2018 N.MZ~ moto~ baja cent~ puebla
## 3 1 poniente 2018-06-01 6 2018 N.ZV~ zte baja cent~ puebla
## 4 1 poniente 2018-06-02 6 2018 N.HU~ huaw~ media cent~ puebla
## 5 1 poniente 2018-06-02 6 2018 N.HU~ huaw~ baja cent~ puebla
## 6 1 poniente 2018-06-04 6 2018 N.HU~ huaw~ baja cent~ puebla
## 7 1 poniente 2018-06-04 6 2018 N.MO~ moto~ baja cent~ puebla
## 8 1 poniente 2018-06-04 6 2018 N.ZV~ zte baja cent~ puebla
## 9 1 poniente 2018-06-05 6 2018 N.HU~ huaw~ baja cent~ puebla
## 10 1 poniente 2018-06-05 6 2018 N.MO~ moto~ baja cent~ puebla
## # ... with 932,953 more rows, and 4 more variables: ciudad <chr>,
## # latitud <dbl>, longitud <dbl>, ventas_diarias <dbl>
13. ¿Cómo se comportan las ventas totales de la compañía por mes?
Con relación a las ventas totales de la compañía \(ABCD\) en los 10 meses de registro, se puede observar un incremento de ventas en los meses de noviembre y diciembre, seguido por una caida drástica en los 3 meses siguientes.
ggplot(p13, aes(x=month, y = amount))+geom_line(color='dodgerblue4', size=3)+theme_classic() + geom_smooth(method="lm") + xlab("Mes") + ylab("Ventas")
14. ¿Cuál es la región con mayor número de ventas en los meses de registro?
La región con mayor número de ventas es la zona centro sur con un total de 512,223 ventas en los 10 meses de registro, equivalente al 48.85% de las ventas registradas. Seguido se encuentra la zona Centro occidente con 167,461 ventas, equivalente al 15.97% de las ventas registradas.
p14 <- p14 %>% mutate(porcentaje = ventas_totales_zona*100/1048575)
p14
## # A tibble: 8 x 3
## zona ventas_totales_zona porcentaje
## <chr> <dbl> <dbl>
## 1 centro sur 512223 48.8
## 2 centro occidente 167655 16.0
## 3 noreste 85779 8.18
## 4 noroeste 77573 7.40
## 5 norte 67410 6.43
## 6 golfo de mexico 66143 6.31
## 7 peninsula de yucatan 43813 4.18
## 8 pacifico sur 27979 2.67
q <- ggplot(data=p14, aes(x=reorder(zona,-ventas_totales_zona), y=ventas_totales_zona, fill=zona)) +
geom_bar(colour="black", stat="identity") +
guides(fill=FALSE)+
scale_fill_manual(values=c("steelblue", "midnightblue","powderblue","steelblue3","skyblue","skyblue1","white","honeydew"))
q+labs(x="zona", y="ventas",title="Ventas por Zona")+theme_classic()+theme(axis.text.x = element_text(angle = 90,size = 10))
mxstate_choropleth(mapa1, num_colors = 8, legend="porcentaje de ventas totales por zona", title="Porcentaje de Ventas (junio 2018 - marzo 2019) por zona")
15. ¿Cuáles son los estados con mayor número de ventas en los 10 meses de registro?
Los tres estados que registraron mayor número de ventas en los 10 meses de registro con: Cdmx, estado de mexico y jalisco; y los estados que registraron menor nùmero de ventas en los ùltimos 10 meses son: durango, baja california sur y zacatecas
p15%>%arrange(estado)
## region estado value
## 1 01 aguascalientes 10796
## 2 02 baja california 33550
## 3 03 baja california sur 4781
## 4 04 campeche 8818
## 5 09 cdmx 207187
## 6 07 chiapas 12533
## 7 08 chihuahua 19988
## 8 05 coahuila 18734
## 9 06 colima 9358
## 10 10 durango 5213
## 11 15 estado de mexico 174189
## 12 11 guanajuato 60194
## 13 12 guerrero 9187
## 14 13 hidalgo 19360
## 15 14 jalisco 71879
## 16 16 michoacan 15428
## 17 17 morelos 29704
## 18 18 nayarit 5244
## 19 19 nuevo leon 56557
## 20 20 oaxaca 6259
## 21 21 puebla 48496
## 22 22 queretaro 24212
## 23 23 quintana roo 17932
## 24 24 san luis potosi 18842
## 25 25 sinaloa 15210
## 26 26 sonora 18788
## 27 27 tabasco 11543
## 28 28 tamaulipas 29222
## 29 29 tlaxcala 9075
## 30 30 veracruz 54600
## 31 31 yucatan 17063
## 32 32 zacatecas 4633
head(p15[,2:3],3)
## estado value
## 1 cdmx 207187
## 2 estado de mexico 174189
## 3 jalisco 71879
tail(p15[,2:3],3)
## estado value
## 30 durango 5213
## 31 baja california sur 4781
## 32 zacatecas 4633
a <- ggplot(data=p15, aes(x=reorder(estado,-value), y=value, fill=estado)) +
geom_bar(colour="black", stat="identity") +
guides(fill=FALSE)+
scale_fill_manual(values=c("grey", "grey","white","grey","midnightblue","grey","grey","grey","grey", "white","midnightblue","grey","grey","grey","midnightblue","grey","grey", "grey","grey","grey","grey","grey","grey","grey","grey", "grey","grey","grey","grey","grey","grey","white"))
a+labs(x="estado", y="ventas",title="Ventas por Estado")+theme_classic()+theme(axis.text.x = element_text(angle = 90,size = 10))
mxstate_choropleth(mapa2, num_colors = 9, legend="ventas", title="Ventas totales (junio 2018 - marzo 2019) por estado")
16. Identificar puntos de venta-
Son 1,909 puntos de venta en toda la República Mexicana.
nrow(p16)
## [1] 1909
mapa3<- mapa3_pdv +
geom_point(data=p16,
aes(x=longitud, y=latitud),colour="blue",
fill="blue",
size=2,pch=17, alpha=I(0.7))+ggtitle("Localización de puntos de vent")
mapa3
17. Identificar puntos de venta con mayor unidades vendidas en los 10 meses de registro.
mapa4 <- ggarrange(mapa12, mapa11, mapa10, mapa9, mapa8, mapa7, mapa6, mapa5, mapa4, ncol=3, nrow=3)
annotate_figure(mapa4, bottom = text_grob("Puntos de venta de la compañía de telecomunicaciones ABCD dependiendo del número de unidades vendidas", color = "black", face = "bold", size = 30),left = text_grob(" Puntos de ventas con menos de 500 unidades vendidas Puntos de ventas con menos de 3000 unidades vendidas Puntos de ventas con más de 4000 unidades vendidas", color = "black", rot = 90, size = 15))
19. Ventas por marca durante 10 meses
Los registros indican que en los últimos 10 meses la marca cuyas ventas son las mayores es Huawei, seguidas por Motorola y Samsung. De la misma manera se pude observar que hay 9 registros que poseen NA en el campo de Marca y que Lenovo y Affixx son las marcas con menos ventas.
p19 <- tabla_final_2 %>% group_by(marca) %>% summarise(ventas_totales = sum(ventas_diarias)) %>% arrange(ventas_totales) %>% mutate(marca=factor(marca, levels=marca))
p19 %>% ggplot( aes(x=marca, y=ventas_totales, label=round(ventas_totales,1))) +
geom_segment( aes(xend=marca, yend=3)) +
geom_point( size=3, color="dodgerblue4") +
coord_flip() +
theme_classic() +
xlab("Marcas")+
ylab("Ventas")+
geom_text(nudge_x = .28)
20. \(Ventas por marca por día\)
por_marca_por_dia<- tabla_final_2 %>%
group_by(marca, fecha) %>%
summarise(ventas_diarias = sum(ventas_diarias))
ggplot(por_marca_por_dia, aes(x=fecha, y = ventas_diarias, color=marca))+
geom_line(size=2) +
theme_classic()
Lo que se pude observar en esta gráfica es que, sin importar la marca, hay periodos en los que las ventas se disparan, por ejemplo: Diciembre.
Sin embargo, para tener una visión más clara de lo que pasa en cada escenario de cada marca, se hace la siguiente gráfica:
ggplot(por_marca_por_dia, aes(x=fecha, y = ventas_diarias, color=marca))+
geom_line(size=2) +
facet_wrap(~marca, scales = "free") +
geom_smooth(method='lm')+
theme_classic()
20_B. $Ventas totales por marca por mes $
ventas_marca_mes <- tabla_final_2 %>% group_by(marca, mes=floor_date(fecha, "month")) %>%
summarize(ventas=sum(ventas_diarias))
ggplot(ventas_marca_mes, aes(x=mes, y = ventas, color=marca))+
geom_line(size=2) +
theme_classic()
ggplot(ventas_marca_mes, aes(x=mes, y = ventas, color=marca))+
geom_line(size=2) +
facet_wrap(~marca, scales = "free") +
geom_smooth(method='lm')+
theme_classic()
21. \(Ventas por SKUs por marca\) Comportamiento de productos por marca en los últimos 10 meses
sku_marca <- tabla_final_2 %>% group_by(marca, sku, mes=floor_date(fecha, "month")) %>%
summarise(ventas=sum(ventas_diarias))
#cuantos sku por marca hay
sku_marca%>%select(marca,sku)%>%unique()%>%mutate(tol=1)%>%group_by(marca)%>%summarise(n=sum(tol))%>%arrange(desc(n))
## # A tibble: 12 x 2
## marca n
## <chr> <dbl>
## 1 apple 129
## 2 huawei 97
## 3 samsung 92
## 4 motorola 60
## 5 hisense 28
## 6 zte 14
## 7 alcatel 13
## 8 sony 10
## 9 lg 7
## 10 lanix 2
## 11 lenovo 2
## 12 affix 1
affix <- sku_marca%>%filter(marca=="affix")
alcatel <- sku_marca%>%filter(marca=="alcatel")
apple <- sku_marca%>%filter(marca=="apple")
Hisense <- sku_marca%>%filter(marca=="hisense")
Huawei <- sku_marca%>%filter(marca=="huawei")
Lanix <- sku_marca%>%filter(marca=="lanix")
Lenovo <- sku_marca%>%filter(marca=="lenovo")
LG <- sku_marca%>%filter(marca=="lg")
Motorola <- sku_marca%>%filter(marca=="motorola")
Samsung <- sku_marca%>%filter(marca=="samsung")
Sony <- sku_marca%>%filter(marca=="sony")
ZTE <- sku_marca%>%filter(marca=="zte")
m1<-ggplot(affix, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m2<-ggplot(alcatel, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m3<-ggplot(apple, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m4 <- ggplot(Hisense, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m5 <- ggplot(Huawei, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m6 <- ggplot(Lanix, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m7 <- ggplot(Lenovo, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m8 <- ggplot(LG, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m9 <- ggplot(Motorola, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m10 <- ggplot(Samsung, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m11 <- ggplot(Sony, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
m12 <- ggplot(ZTE, aes(x=mes, y=ventas, color=sku))+geom_line(size=1)
ggarrange(m1, m2, m3,
labels = c("AFFIX", "ALCATEL", "APPLE"),
ncol = 1, nrow = 3)
ggarrange(m4, m5, m6,
labels = c("HISENSE", "HUAWEI", "LANIX"),
ncol = 1, nrow = 3)
ggarrange(m7, m8, m9,
labels = c("LENOVO", "LG", "MOTOROLA"),
ncol = 1, nrow = 3)
ggarrange(m10, m11, m12,
labels = c("SAMSUNG", "SONY", "ZTE"),
ncol = 1, nrow = 3)
22. \(Ventas por marca y estado\)
marca_estado<- tabla_final_2 %>% group_by(estado, marca) %>%
summarise(ventas=sum(ventas_diarias))
library(RColorBrewer)
cbbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
x <- ggplot(marca_estado, aes(x = reorder(estado, -ventas), y = ventas, fill = marca)) +
geom_bar(stat = "identity")+
scale_fill_brewer(palette = "Paired")+theme_classic()
x+labs(x="estado", y="ventas",title="Ventas por Estado por Marca")+theme(axis.text.x = element_text(angle = 90,size = 13))
23. \(Ventas por marca, estado y mes\)
marca_estado<- tabla_final_2 %>% group_by(estado, marca, mes=floor_date(fecha, "month")) %>%
summarise(ventas=sum(ventas_diarias))
ggplot(marca_estado, aes(x = mes, y = ventas, fill = marca)) +
geom_bar(stat = "identity")+
scale_fill_brewer(palette = "Paired")+theme_classic()+facet_wrap(~estado)+labs(x="estado", y="ventas",title="Ventas por Estado por Marca")+theme(axis.text.x = element_text(angle = 90,size = 13))